在 GameMaker Studio 2 中处理键盘时,你可以使用各种函数识别不同的键盘状态,如按下或释放。还有一些将所有按键存储为字符串或者可以告诉你按下的最后一个键是什么,以及其他允许你完全清除键盘状态的按键。
来自一个(或多个)键的每个输入字符由其 UTF8 码(一个数值)定义的。可以使用 ord() 函数检索任何字符的值,GameMaker Studio 2 也有一系列 常量 用于最常用的键盘特殊键和特殊函数。通常,你将 ord() 与 keyboard_check *() 函数结合使用,如下所示:
if keyboard_check(ord("A"))
{
hspeed = -5;
}
因此,上面将检查 “A” 键,如果它被按下,那么它将把物体的水平速度设置为 -5。 注意,以这种方式使用 ord() 只有在输入字符串长度仅有一个字符并且是 0 到 9 之间的数字或 大写 的 A 到 Z 的罗马字符时函数才能正常工作。函数 ord() 将返回完整的 UTF8 值,但 keyboard_check *() 函数将 仅检测 A - Z 和 0 - 9。但是如果你想使用方向键怎么办?或者,如果要使用 “shift” 键修改操作? 好吧,为此 GameMaker Studio 2 有一系列 vk_常量(vk_ 代表 虚拟键盘)使得你可以用来代替 ord():
常量 | 描述 |
---|---|
vk_nokey | 表示没有按下任何键的键代码 |
vk_anykey | 表示按下任意键的键码 |
vk_left | 左箭头键的键码 |
vk_right | 右箭头键的键码 |
vk_up | 上箭头键的键码 |
vk_down | 下箭头键的键码 |
vk_enter | enter 键 |
vk_escape | esc 键 |
vk_space | space 键 |
vk_shift | 任何一个 shift 键 |
vk_control | 任何一个 control 键 |
vk_alt | alt 键 |
vk_backspace | backspace 键 |
vk_tab | tab 键 |
vk_home | home 键 |
vk_end | end 键 |
vk_delete | delete 键 |
vk_insert | insert 键 |
vk_pageup | pageup 键 |
vk_pagedown | pagedown 键 |
vk_pause | pause/break 键 |
vk_printscreen | printscreen/sysrq 键 |
vk_f1 ... vk_f12 | 功能键 F1 至 F12 的键码 |
vk_numpad0 ... vk_numpad9 | 数字键盘上的数字键 |
vk_multiply | 数字键盘上的乘号键(*) |
vk_divide | 数字键盘上的除号键(/) |
vk_add | 数字键盘上的加号键(+) |
vk_subtract | 数字键盘上的减号键(-) |
vk_decimal | 数字小键盘上的小数点键(.) |
以下常量只能与 keyboard_check_direct() 一起使用:
常量 | 描述 |
---|---|
vk_lshift | 左 shift 键 |
vk_lcontrol | 左 control 键 |
vk_lalt | 左 alt 键 |
vk_rshift | 右 shift 键 |
vk_rcontrol | 右 control 键 |
vk_ralt | 右 alt 键 |
if keyboard_check_pressed(vk_tab)
{
instance_create_layer(x, y, "Controllers", obj_Menu);
}
上面的代码将检测是否 按下 “Tab” 键并创建物体 “obj_Menu” 的实例(如果是)。
如果你需要检查一个不是 0 - 9,A - Z 或其中一个 VK 常量的关键字符,那么你应该检查一个 keyboard_* 变量,比如keyboard_lastchar:
var _key = keyboard_lastchar;
if ord(_key) == ord("ç")
{
show_debug_message("ç key pressed");
}
有关可用的 GameMaker Studio 2 键盘函数的信息,请参阅本手册的以下部分:
使用键盘时可以使用以下函数:
注意:使用屏幕 虚拟键盘 时,这些函数将 无法 工作。
以下变量内置于 GameMaker Studio 2,可以访问并获取有关键盘状态和输入的信息:
注意:当使用 虚拟键盘 时,仅有 keyboard_string 变量将在使用键盘输入时更新。